from time import sleep
from threading import Thread,Lock,current_thread

class Account():
	def __init__(self):
		self._balance = 0
		self._lock = Lock()

	def deposit(self,money):
		# 先获取锁才能执行后续的代码
		self._lock.acquire()
		try:
			new_balance = self._balance + money
			sleep(0.01)
			self._balance = new_balance
		finally:
			# 在finally中执行释放锁的操作保证正常异常锁都能释放
			self._lock.release()

	@property
	def balance(self):
		return self._balance

class AddMoneyThread(Thread):
	"""docstring for AddMoneyThread"""
	def __init__(self, acount, money):
		super().__init__()
		self._acount = account
		self._money = money
	def run(self):
		# print(current_thread().name)
		self._acount.deposit(self._money)

if __name__ == '__main__':
	account = Account()
	threads = []
	for _ in range(100):
		t = AddMoneyThread(account,1)
		threads.append(t)
		t.start()
	for t in threads:
		t.join()
	print('账户余额为：￥%d元' % account.balance)